package com.qf.base.util;

import com.alibaba.fastjson.JSONObject;
import com.qf.base.vo.UserVO;
import io.jsonwebtoken.*;

import java.util.Date;

/**
 * @author 汤奇
 * @version V1.0
 * @Project BookPro
 * @Package com.qf.base.util
 * @Description: JWT工具类  解决token签发与token认证的问题
 * @Date 2022/7/29 19:41
 */
public class JwtUtil {
    /**
     * token签发的有效期
     */
    public static final int TOKEN_EXPIRE=1000*60*30;

    /**
     * token加密算法的盐
     */
    public static final String TOKEN_KEY="qianfeng";

    /**
     * 生成一个token
     */
    public static String generatorToken(UserVO user){
        //产生token
        String token = Jwts.builder()
                //设置用户昵称
                .setSubject(user.getNickname())
                //设置token的签发时间
                .setIssuedAt(new Date())
                //设置token的过期时间
                .setExpiration(new Date(System.currentTimeMillis()+TOKEN_EXPIRE))
                //设置携带信息的对象
                .claim("user", JSONObject.toJSONString(user))
                //设置加密方式
                .signWith(SignatureAlgorithm.HS256,TOKEN_KEY.getBytes())
                //生成token
                .compact();
        return token;
    }

    public static UserVO checkToken(String token){
        Claims body = null;
        try {
            body = Jwts.parser().setSigningKey(TOKEN_KEY.getBytes()).parseClaimsJws(token).getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        Object userJsonString = body.get("user");
        UserVO user = JSONObject.parseObject((String) userJsonString, UserVO.class);
        return user;
    }
}
